package com.scott;

import java.util.Scanner;

/**
 * @author 黄后林
 * @version 1.0
 * @note
 * @date 2022-03-13 18:45:53
 */
public class T10 {
    public static void main(String[] args){

        System.out.println(1e5);
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s = sc.nextLine();
            System.out.println(isBracketsStr(s) ? "YES" : "NO");
        }
        sc.close();


    }

    public static boolean isBracketsStr(String str) {
        if (str == null || str.length() == 0 || str.length() > 1e5) {
            return false;
        }
        char[] chars = str.toCharArray();
        // 相当于栈中有多少个'('
        int brackets = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] != '(' && chars[i] != ')') {
                return false;
            }
            // 首位字符如果是右括号，不用进行后续的流程了，肯定不是有效括号串
            if (chars[0] == ')') {
                return false;
            }
            if (chars[i] == '(') {
                // 相当于将'('压栈
                brackets++;
            } else if (chars[i] == ')') {
                // 相当于将'('出栈
                brackets--;
                // 栈已为空，此时再进行出栈操作，则说明在左括号'('后面有多于其数量的右括号')'，因此直接判定不是有效括号串
                if (brackets < 0) {
                    return false;
                }
            }
        }
        return (brackets == 0);
    }
}
